/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UICompositeRadioLengendContainer.js<br>
 * 日期：2016年9月14日<br>
 * 作者: 杨顺强<br>
 * 功能：创建radio和textbox组件在一起的复合组件<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/
window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer<br>
 * 函数功能：文字说明的横线组件<br>
 * 参数输入：<br>
 * 异常信息：<br>
 */
Rainier.UI.V2.UICompositeRadioLengendContainer = Rainier.UI.V2.UIComposite.extend({
	
	NAME : "Rainier.UI.V2.UICompositeRadioLengendInput",
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.init<br>
	 * 函数功能：初始化横线组件<br>
	 * 参数输入：objParentComposite : UIComposite 父组件对象<br>
	 * 参数输入：objProperties:  格式按照如下方式填写
	 * {
	 *    optionName   :""			//组件标识名，必写
	 * 	  radio		  : 			//单选按钮组件
	 * 	 {
	 * 	 	name 	: ""				//radio控件的name属性值
	 * 	 	value	: ""				//radio控件的value值。当选中时获取
	 *   	description:""				//radio控件后面跟的描述该radio组件的值
	 * 	 }				,
	 * 	 //radioLengendComponnet1 的数量上限为3，根据具体情况而定
	 * 	 radioLengendComponent1: {},		//组件,是对应的radioLengendComponnet1, 其中对应的参数参见对应的RadioLengendComponnet组件
	 * 	 radioLengendComponent2: {},		//组件,是对应的radioLengendComponnet1, 其中对应的参数参见对应的RadioLengendComponnet组件
	 * 	 radioLengendComponent3: {},		//组件,是对应的radioLengendComponnet1, 其中对应的参数参见对应的RadioLengendComponnet组件
	 * 	  
	 * }<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	init : function(objParentComposite,objProperties){
		
		this.radio 						= null;			//当前组件中的radio控件
		this.radioLengendComponent1 	= null;			//当前空间中的第一个textInputButton1控件
		this.radioLengendComponent2 	= null;			//当前空间中的第二个textInputButton2控件
		this.radioLengendComponent3 	= null;			//当前空间中的第三个textInputButton3控件
		
		if(objProperties.radio){
			this.radioProperties = objProperties.radio;
		}else{
			throw new Error("该组件的radio为必设项,请修改对象参数信息");
		}
		
		if(objProperties.radioLengendComponent1){
			this.radioLengendComponentProperties1 = objProperties.radioLengendComponent1;
		}
		
		if(objProperties.radioLengendComponent2){
			this.radioLengendComponentProperties2 = objProperties.radioLengendComponent2;
		}
		
		if(objProperties.radioLengendComponent3){
			this.radioLengendComponentProperties3 = objProperties.radioLengendComponent3;
		}
	
		this._super(objParentComposite,objProperties);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.createComposite<br>
	 * 函数功能：组件创建函数，完成对组件的创建工作<br>
	 * 参数输入：eleParent ： 父节点Tag<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	createComposite : function(eleParent){
		this._super(eleParent);
		var newEle = this.CreateElement("div",this.m_objProperties.id,null,{style:"margin-left:30px;margin-top:10px;float:left"});
		eleParent.append(newEle);
		var _this = this;
		//添加组件内容
		//第一步： 添加radio组件；
		var $fieldset  = $("<fieldset style='border-color:#D9D9D9;width:400px;border-width:1px;padding:-1px;'></fieldset>");
		var $lengend   = $("<legend></legend>");
		var $input 	   = null;	
		if(this.radioProperties.description && this.radioProperties.name 
				&& this.radioProperties.value){
			$input	   = $("<input type='radio' style='vertical-align:middle;' name=''>&nbsp;<span>"+this.radioProperties.description+"</span>");
			$input.attr("name",this.radioProperties.name);
			$input.attr("value",this.radioProperties.value);
		}else{
			throw new Error("参数错误，请重新填写对应的参数");
		}
		this.radio = $input;
		if($input !== null){			
			$lengend.append($input);
		}
		$fieldset.append($lengend);
		
		//向lengend组件中添加对应的TextInputButton组件。
		if(this.radioLengendComponentProperties1){			
			this.radioLengendComponent1 =  new Rainier.UI.V2.UICompositeRadioLengendComponent(this,this.radioLengendComponentProperties1);
			$fieldset.children(":last-child").after(this.radioLengendComponent1.getElement());
		}
		if(this.radioLengendComponentProperties2){			
			this.radioLengendComponent2 =  new Rainier.UI.V2.UICompositeRadioLengendComponent(this,this.radioLengendComponentProperties2);
			$fieldset.children(":last-child").after(this.radioLengendComponent2.getElement());
		}
		if(this.radioLengendComponentProperties3){			
			this.radioLengendComponent3 =  new Rainier.UI.V2.UICompositeRadioLengendComponent(this,this.radioLengendComponentProperties3);
			$fieldset.children(":last-child").after(this.radioLengendComponent3.getElement());
		}
		newEle.append($fieldset);
		
		//初始化时，把所有的组件内部的 编辑组件设置为disable
		var childrenComponent = this.getRadioLengendComponentArr();
		for(var index in childrenComponent){
			var childComponent = childrenComponent[index];		//当前组件的子组件
			var childbox	   = childComponent.getChildBox();	//子组件中的编辑组件	
			childbox.disable();
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.getRadioLengendComponentArr<br>
	 * 函数功能：获取当前组件中的 可编辑子组件<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：可编辑子组件数组<br>
	 * 异常信息：<br>
	 */
	getRadioLengendComponentArr : function(){
		var componentArr = [];
		var component1 = this.getRadioLengendComponent1();
		var component2 = this.getRadioLengendComponent2();
		var component3 = this.getRadioLengendComponent3();
		if(component1){
			componentArr.push(component1);
		}
		if(component2){			
			componentArr.push(component2);
		}
		if(component3){
			componentArr.push(component3);
		}
		return componentArr;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.getRadioLengendComponent1<br>
	 * 函数功能：获取当前组件中的 可编辑子组件<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：可编辑子组件1<br>
	 * 异常信息：<br>
	 */
	getRadioLengendComponent1 : function(){
		if(this.radioLengendComponent1){			
			return this.radioLengendComponent1;
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.getRadioLengendComponent2<br>
	 * 函数功能：获取当前组件中的 可编辑子组件<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：可编辑子组件2<br>
	 * 异常信息：<br>
	 */
	getRadioLengendComponent2 : function(){
		if(this.radioLengendComponent2){			
			return this.radioLengendComponent2;
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.getRadioLengendComponent3<br>
	 * 函数功能：获取当前组件中的 可编辑子组件<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：可编辑子组件2<br>
	 * 异常信息：<br>
	 */
	getRadioLengendComponent3 : function(){
		if(this.radioLengendComponent3){			
			return this.radioLengendComponent3;
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.getRadio<br>
	 * 函数功能：获取当前组件中的radio控件<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：radio组件<br>
	 * 异常信息：无<br>
	 */
	getRadio : function(){
		return this.radio;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.getRadioValue<br>
	 * 函数功能：获取当前组件中的radio控件中的值<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：radio组件中的值，是否被选中。<br>
	 * 异常信息：无<br>
	 */
	getRadioValue : function(){
		return this.getRadio().is(":checked");
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.setRadioValue<br>
	 * 函数功能：获取当前组件中的radio控件中的值<br>
	 * 参数输入：value boolean类型的值<br>
	 * 参数输出：无<br>
	 * 函数返回：radio组件中的值，是否被选中。<br>
	 * 异常信息：无<br>
	 */
	setRadioValue : function(value){
		this.getRadio().attr("checked",value);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.radioValueChanged<br>
	 * 函数功能：当radio的选中状态发生变化后，修改radio中控制的子组件的，状态，是否可用<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	radioValueChanged : function(){
		var childrenComponent = this.getRadioLengendComponentArr();	//当前组件的子组件
		for(var index in childrenComponent){
			var childComponent = childrenComponent[index];		//当前组件的子组件
			var childbox	   = childComponent.getChildBox();	//子组件中的编辑组件
			if(this.radio.is(":checked")){
				childbox.enable();
			}else{
				childbox.disable();
			}
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeRadioLengendContainer.getChildrenComponent<br>
	 * 函数功能：获取当前组件中的所有 可编辑子组件<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：所有可编辑子组件对象<br>
	 * 异常信息：<br>
	 */
	getChildrenComponent : function(){
		var componentMap = {};
		var _this = this;
		var name = null;
		if(this.radioLengendComponent1){
			name 	= _this.radioLengendComponent1.getOptionName();
			componentMap[name] = _this.radioLengendComponent1;
		}
		if(this.radioLengendComponent2){
			name 	= _this.radioLengendComponent2.getOptionName();
			componentMap[name] = _this.radioLengendComponent2;
		}
		if(this.radioLengendComponent3){
			name 	= _this.radioLengendComponent3.getOptionName();
			componentMap[name] = _this.radioLengendComponent3;
		}
		return componentMap;
	},
});
